#include <iostream>
#include <algorithm>
#include <cstring>

using namespace std;

const int N = 20;

int n, m, k;
int a[N][N];

int col[N]; // 记录清空之后每一列的和

//统计x的二进制表示中1的个数
int calc(int x)
{
	int ret = 0;
	while(x)
	{
		ret++;
		x -= x & -x;
	}

	return ret;
}

//按照值从大到小排序
bool cmp(int x, int y)
{
	return x > y;
}

int main()
{
	cin >> n >> m >> k;
	for(int i = 0; i < n; i++)
		for(int j = 0; j < m; j++)
			cin >> a[i][j];

	int ret = 0;
	//暴力枚举出行的所有选法，当行确定之后，列也就跟着确定了
	for(int st = 0; st < (1 << n); st++)
	{
		int cnt = calc(st); // 统计有多少个1
		if(cnt > k) continue; // 不合法的状态

		memset(col, 0, sizeof(col)); // 清空每一列的值
		int sum = 0; // 记录当前选法中的和
		for(int i = 0; i < n; i++)
		{
			for(int j = 0; j < m; j++)
			{
				if((st >> i) & 1) sum += a[i][j];
				else col[j] += a[i][j];
			}
		}

		//贪心选出前 k-cnt 大的数
		sort(col, col + m, cmp);
		for(int i = 0; i < min(k - cnt, m); i++) sum += col[i];

		ret = max(ret, sum);
	}

	cout << ret << endl;

	return 0;
}

